home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
parallel
/
philosop
< prev
next >
Wrap
Text File
|
1992-04-11
|
2KB
|
54 lines
%---------------------------------------------------------------------
%----Dining philosophers for Linda Prolog
%----
%----Written by Geoff Sutcliffe
%---------------------------------------------------------------------
dine(Number_of_philosophers,Number_of_eats,Machines):-
length(Machines,Number_of_philosophers),
First_philosopher_number is Number_of_philosophers -1,
set_table_and_philosophers(First_philosopher_number,
Number_of_philosophers,Number_of_eats,Machines).
%---------------------------------------------------------------------
%----Supply the room tickets, chopsticks and philosophers
set_table_and_philosophers(0,Number_of_philosophers,Number_of_eats,
[Machine]):-
!,
out(chopstick(0)),
eval(Machine,try_eat(0,Number_of_philosophers,Number_of_eats),
philosophers).
set_table_and_philosophers(Philosopher_number,Number_of_philosophers,
Number_of_eats,[Machine|Rest_of_machines]):-
out(ticket),
out(chopstick(Philosopher_number)),
eval(Machine,try_eat(Philosopher_number,Number_of_philosophers,
Number_of_eats),philosophers),
Next_philosopher_number is Philosopher_number - 1,
set_table_and_philosophers(Next_philosopher_number,
Number_of_philosophers,Number_of_eats,Rest_of_machines).
%---------------------------------------------------------------------
try_eat(Philosopher_number,_,0):-
send_request__(write(philosopher_completed_)),
send_request__(writeln(Philosopher_number)).
try_eat(Philosopher_number,Number_of_philosophers,Number_of_eats):-
in(ticket),
in(chopstick(Philosopher_number)),
Next_chopstick_number is (Philosopher_number + 1) mod
Number_of_philosophers,
in(chopstick(Next_chopstick_number)),
send_request__(write(philosopher_)),
send_request__(write(Philosopher_number)),
send_request__(write(is_eating_)),
send_request__(writeln(Number_of_eats)),
out(chopstick(Philosopher_number)),
out(chopstick(Next_chopstick_number)),
out(ticket),
send_request__(write(philosopher_)),
send_request__(write(Philosopher_number)),
send_request__(writeln(is_thinking)),
New_number_of_eats is Number_of_eats - 1,
try_eat(Philosopher_number,Number_of_philosophers,
New_number_of_eats).
%---------------------------------------------------------------------